const UAParser = require('ua-parser-js');
class PakjUtils {
  /**
   * @desc url 参数转换对象
   * @param {String} url default:window.location.href
   * @return {Object}
   */
  parseQueryString(url) {
    url = url == null ? window.location.href : url;
    var search =
      url.lastIndexOf('?') === -1
        ? ''
        : url.substring(url.lastIndexOf('?') + 1);
    if (!search) {
      return {};
    }
    return JSON.parse(
      '{"' +
        decodeURI(search)
          .replace(/"/g, '\\"')
          .replace(/&/g, '","')
          .replace(/=/g, '":"') +
        '"}'
    );
  }
  /**
   * @description 判断当前是否为微信浏览器或支付宝浏览器
   */
  getBrowserType() {
    let str;
    if (/MicroMessenger/.test(window.navigator.userAgent)) {
      // 微信浏览器
      str = 'wxBrowser';
    } else if (/AlipayClient/.test(window.navigator.userAgent)) {
      // 支付宝浏览器
      str = 'AlipayBrowser';
    } else {
      // 其他浏览器
      str = 'otherBrowser';
    }
    return str;
  }
  /**
   * @description 判断当前是否是微信环境下
   */
  isWeixinBroswer() {
    var ua = navigator.userAgent.toLowerCase();
    var isWeixin = ua.indexOf('micromessenger') !== -1;
    if (isWeixin) {
      return true;
    } else {
      return false;
    }
  }
  isApp() {
    var ua = navigator.userAgent.toLowerCase();
    var isapp = ua.indexOf('pingankuaijiao') !== -1;
    if (isapp) {
      return true;
    } else {
      return false;
    }
  }
  getCurrentEnv() {
    let str;
    if (this.isWeixinBroswer()) {
      if (this.isMiniProgram()) {
        str = 'mini';
      } else {
        str = 'wx';
      }
    } else {
      str = 'h5';
    }
    if (this.isApp()) {
      str = 'app';
    }
    return str;
  }
  getCurrentEnvEnum() {
    let str = '6';
    if (this.isWeixinBroswer()) {
      if (this.isMiniProgram()) {
        str = '5';
      } else {
        str = '4';
      }
    } else {
      str = '6';
    }
    if (this.isApp() && this.isAndroid()) {
      str = '2';
    }
    if (this.isApp() && this.isIos()) {
      str = '1';
    }
    return str;
  }
  isAndroid() {
    return UAParser.getOSName() === 'Android';
  }
  isIos() {
    return UAParser.getOSName() === 'iOS';
  }
  /**
   * @description 判断是否在小程序环境下
   */
  isMiniProgram() {
    if (window.__wxjs_environment === 'miniprogram') {
      return true;
    } else {
      return false;
    }
  }
  /* Part of Cookie */
  /**
   * @desc 根据name读取cookie
   * @param {String} name
   * @return {String}
   */
  getCookie(name) {
    var arr = document.cookie.replace(/\s/g, '').split(';');
    for (var i = 0; i < arr.length; i++) {
      var tempArr = arr[i].split('=');
      if (tempArr[0] === name) {
        return decodeURIComponent(tempArr[1]);
      }
    }
  }
  /**
   * @desc 根据name删除cookie
   * @param {String} name
   */
  removeCookie(name) {
    /* 设置已过期，系统会立刻删除cookie */
    this.setCookie(name, '1', -1);
  }
  /**
   * @desc 设置cookie
   * @param {String} name
   * @param {String} value
   * @param {Number} days
   */
  setCookie(name, value, days) {
    var date = new Date();
    date.setDate(date.getDate() + days);
    document.cookie = name + '=' + value + ';expires=' + date;
  }
  getOSName() {
    // 新版本请使用这个方法获取当前系统名称，可能返回的值为Android iOS
    return new UAParser().getOS().name;
  }
  getOSVersion() {
    // 获取当前系统版本号
    return new UAParser().getOS().version;
  }
  getPhoneModel() {
    // 获取当前手机型号
    let device = new UAParser().getDevice();
    return device.vendor + '_' + device.model;
  }
  /* Part of Regexp */
  /**
   * @desc 判断是否为邮箱地址
   * @param {String} str
   * @return {Boolean}
   */
  isEmail(str) {
    return /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(str);
  }
  /**
   * @desc 判断是否为身份证号码
   * @param {String|Number} str
   * @return {Boolean}
   */
  isIdCard(str) {
    return /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-2]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/.test(
      str
    );
  }
  /**
   * @desc 判断是否为手机号
   * @param {String|Number} str
   * @return {Boolean}
   */
  isPhoneNum(str) {
    // TODO 需要添加166号段的支持，最好可以有更好的手机号码兼容
    return /^0?1[3|4|5|6|7|8][0-9]\d{8}$/.test(str);
  }
}
export default new PakjUtils();
